home *** CD-ROM | disk | FTP | other *** search
/ Free Software Collection: Marty 1 / FM Towns Marty 1 Free Software Collection.iso / tool / book / src / vram.asm < prev    next >
Assembly Source File  |  1993-11-11  |  19KB  |  726 lines

  1. ;*************************************
  2. ;        VRAM Direct Access Program
  3. ;*************************************
  4.  
  5. extrn    page_ofs:dword
  6.  
  7. bitptn    segment 'DATA'
  8.  
  9. ;*************************************
  10. ;        16色VRAMビットパタ-ン
  11. ;*************************************
  12.  
  13. ankfnt    dd        16*256 dup(?)
  14. fntcol    dd        256 dup(?)
  15. fntptn    dd        000000000h,0F0000000h,00F000000h,0FF000000h
  16.         dd        000F00000h,0F0F00000h,00FF00000h,0FFF00000h
  17.         dd        0000F0000h,0F00F0000h,00F0F0000h,0FF0F0000h
  18.         dd        000FF0000h,0F0FF0000h,00FFF0000h,0FFFF0000h
  19.         dd        00000F000h,0F000F000h,00F00F000h,0FF00F000h
  20.         dd        000F0F000h,0F0F0F000h,00FF0F000h,0FFF0F000h
  21.         dd        0000FF000h,0F00FF000h,00F0FF000h,0FF0FF000h
  22.         dd        000FFF000h,0F0FFF000h,00FFFF000h,0FFFFF000h
  23.         dd        000000F00h,0F0000F00h,00F000F00h,0FF000F00h
  24.         dd        000F00F00h,0F0F00F00h,00FF00F00h,0FFF00F00h
  25.         dd        0000F0F00h,0F00F0F00h,00F0F0F00h,0FF0F0F00h
  26.         dd        000FF0F00h,0F0FF0F00h,00FFF0F00h,0FFFF0F00h
  27.         dd        00000FF00h,0F000FF00h,00F00FF00h,0FF00FF00h
  28.         dd        000F0FF00h,0F0F0FF00h,00FF0FF00h,0FFF0FF00h
  29.         dd        0000FFF00h,0F00FFF00h,00F0FFF00h,0FF0FFF00h
  30.         dd        000FFFF00h,0F0FFFF00h,00FFFFF00h,0FFFFFF00h
  31.         dd        0000000F0h,0F00000F0h,00F0000F0h,0FF0000F0h
  32.         dd        000F000F0h,0F0F000F0h,00FF000F0h,0FFF000F0h
  33.         dd        0000F00F0h,0F00F00F0h,00F0F00F0h,0FF0F00F0h
  34.         dd        000FF00F0h,0F0FF00F0h,00FFF00F0h,0FFFF00F0h
  35.         dd        00000F0F0h,0F000F0F0h,00F00F0F0h,0FF00F0F0h
  36.         dd        000F0F0F0h,0F0F0F0F0h,00FF0F0F0h,0FFF0F0F0h
  37.         dd        0000FF0F0h,0F00FF0F0h,00F0FF0F0h,0FF0FF0F0h
  38.         dd        000FFF0F0h,0F0FFF0F0h,00FFFF0F0h,0FFFFF0F0h
  39.         dd        000000FF0h,0F0000FF0h,00F000FF0h,0FF000FF0h
  40.         dd        000F00FF0h,0F0F00FF0h,00FF00FF0h,0FFF00FF0h
  41.         dd        0000F0FF0h,0F00F0FF0h,00F0F0FF0h,0FF0F0FF0h
  42.         dd        000FF0FF0h,0F0FF0FF0h,00FFF0FF0h,0FFFF0FF0h
  43.         dd        00000FFF0h,0F000FFF0h,00F00FFF0h,0FF00FFF0h
  44.         dd        000F0FFF0h,0F0F0FFF0h,00FF0FFF0h,0FFF0FFF0h
  45.         dd        0000FFFF0h,0F00FFFF0h,00F0FFFF0h,0FF0FFFF0h
  46.         dd        000FFFFF0h,0F0FFFFF0h,00FFFFFF0h,0FFFFFFF0h
  47.         dd        00000000Fh,0F000000Fh,00F00000Fh,0FF00000Fh
  48.         dd        000F0000Fh,0F0F0000Fh,00FF0000Fh,0FFF0000Fh
  49.         dd        0000F000Fh,0F00F000Fh,00F0F000Fh,0FF0F000Fh
  50.         dd        000FF000Fh,0F0FF000Fh,00FFF000Fh,0FFFF000Fh
  51.         dd        00000F00Fh,0F000F00Fh,00F00F00Fh,0FF00F00Fh
  52.         dd        000F0F00Fh,0F0F0F00Fh,00FF0F00Fh,0FFF0F00Fh
  53.         dd        0000FF00Fh,0F00FF00Fh,00F0FF00Fh,0FF0FF00Fh
  54.         dd        000FFF00Fh,0F0FFF00Fh,00FFFF00Fh,0FFFFF00Fh
  55.         dd        000000F0Fh,0F0000F0Fh,00F000F0Fh,0FF000F0Fh
  56.         dd        000F00F0Fh,0F0F00F0Fh,00FF00F0Fh,0FFF00F0Fh
  57.         dd        0000F0F0Fh,0F00F0F0Fh,00F0F0F0Fh,0FF0F0F0Fh
  58.         dd        000FF0F0Fh,0F0FF0F0Fh,00FFF0F0Fh,0FFFF0F0Fh
  59.         dd        00000FF0Fh,0F000FF0Fh,00F00FF0Fh,0FF00FF0Fh
  60.         dd        000F0FF0Fh,0F0F0FF0Fh,00FF0FF0Fh,0FFF0FF0Fh
  61.         dd        0000FFF0Fh,0F00FFF0Fh,00F0FFF0Fh,0FF0FFF0Fh
  62.         dd        000FFFF0Fh,0F0FFFF0Fh,00FFFFF0Fh,0FFFFFF0Fh
  63.         dd        0000000FFh,0F00000FFh,00F0000FFh,0FF0000FFh
  64.         dd        000F000FFh,0F0F000FFh,00FF000FFh,0FFF000FFh
  65.         dd        0000F00FFh,0F00F00FFh,00F0F00FFh,0FF0F00FFh
  66.         dd        000FF00FFh,0F0FF00FFh,00FFF00FFh,0FFFF00FFh
  67.         dd        00000F0FFh,0F000F0FFh,00F00F0FFh,0FF00F0FFh
  68.         dd        000F0F0FFh,0F0F0F0FFh,00FF0F0FFh,0FFF0F0FFh
  69.         dd        0000FF0FFh,0F00FF0FFh,00F0FF0FFh,0FF0FF0FFh
  70.         dd        000FFF0FFh,0F0FFF0FFh,00FFFF0FFh,0FFFFF0FFh
  71.         dd        000000FFFh,0F0000FFFh,00F000FFFh,0FF000FFFh
  72.         dd        000F00FFFh,0F0F00FFFh,00FF00FFFh,0FFF00FFFh
  73.         dd        0000F0FFFh,0F00F0FFFh,00F0F0FFFh,0FF0F0FFFh
  74.         dd        000FF0FFFh,0F0FF0FFFh,00FFF0FFFh,0FFFF0FFFh
  75.         dd        00000FFFFh,0F000FFFFh,00F00FFFFh,0FF00FFFFh
  76.         dd        000F0FFFFh,0F0F0FFFFh,00FF0FFFFh,0FFF0FFFFh
  77.         dd        0000FFFFFh,0F00FFFFFh,00F0FFFFFh,0FF0FFFFFh
  78.         dd        000FFFFFFh,0F0FFFFFFh,00FFFFFFFh,0FFFFFFFFh
  79. ;**********************************************
  80. ;        漢字コ-ドチェックテ-ブル
  81. ;**********************************************
  82. ISKAN1    equ     1
  83. ISKAN2    equ     2
  84. ;                0 1 2 3 4 5 6 7 8 9 A B C D E F
  85. kantbl    db        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;0
  86.         db        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;1
  87.         db        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;2
  88.         db        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;3
  89.         db        2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;4
  90.         db        2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;5
  91.         db        2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;6
  92.         db        2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0 ;7
  93.         db        2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ;8
  94.         db        3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ;9
  95.         db        2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;A
  96.         db        2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;B
  97.         db        2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;C
  98.         db        2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;D
  99.         db        3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ;E
  100.         db        3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0 ;F
  101. bitptn    ends
  102.  
  103. VRAM    segment 'CODE'
  104.         assume    cs:VRAM,ds:bitptn
  105. ;*******************************************************
  106. ;            String to VRAM Display
  107. ;*******************************************************
  108. ;    putstr(char *vram, char *str, int len, char *type)
  109. ;                +8            +12       +16       +20
  110. ;*******************************************************
  111.         align    4                                ; align set
  112.         public    putstr
  113. putstr    proc    near
  114.         push    ebp
  115.         mov     ebp,esp
  116.         xor     eax,eax
  117.         push    eax                             ; work push
  118.  
  119.         push    gs
  120.         push    fs
  121.         push    es
  122.         push    esi
  123.         push    edi
  124.         push    edx
  125.         push    ecx
  126.         push    ebx
  127.         cld
  128.         mov     ax,104h                         ; VRAM Selecter
  129.         mov     es,ax                            ; es = VRAM Selecter
  130.         mov     ax,0110h                        ; TBIOS Selecter
  131.         mov     fs,ax                            ; fs = TBIOS
  132.         mov     ax,ds
  133.         mov     gs,ax                            ; gs = ds
  134.  
  135.         align    4                                ; align set
  136. putlop:                                         ; Put Loop
  137.         mov     edi,[ebp+16]                    ; load strings len
  138.         or        edi,edi
  139.         je        Left_clear                        ; End of String ?
  140.         dec     edi                             ; dec strings len
  141.         mov     [ebp+16],edi                    ; save strings len
  142.  
  143.         mov     esi,[ebp+12]                    ; char *str
  144.         lodsb                                    ; Get String    ※
  145.  
  146.         mov     edi,[ebp+20]
  147.         mov     cl,byte ptr [edi]              ; 文字種別を獲得
  148.         inc     edi
  149.         mov     [ebp+20],edi                    ; ptr++;
  150.         cmp     cl,0h                           ; is TYP_NORMAL ?
  151.         jnz     putank                          ;   No! -> goto putank
  152.  
  153.         movzx    eax,al
  154.         mov     bl,[eax+offset kantbl]
  155.         and     bl,ISKAN1
  156.         jz        putank                            ; Not iskanji1 ?
  157.  
  158.         mov     cl,byte ptr [edi]              ; 文字種別を獲得
  159.         add     edi,1
  160.         mov     [ebp+20],edi                    ; ptr++;
  161.         cmp     cl,0h                           ; is TYP_NORMAL ?
  162.         jnz     putank                          ;   No! -> goto putank
  163.  
  164.         movzx    ebx,byte ptr [esi]
  165.         mov     bh,[ebx+offset kantbl]
  166.         and     bh,ISKAN2
  167.         jz        putank                            ; Not iskanji2 ?
  168.  
  169.         mov     bh,al
  170.         inc     esi                             ; double_word ?????     ※
  171.         mov     [ebp+12],esi                    ; Save *str
  172.  
  173.         sub     dword ptr [ebp+16],1            ; dec strings len
  174.  
  175.         shl     bh,1                            ; Shift Jis to Jis
  176.         cmp     bl,080h
  177.         adc     bx,1f61h
  178.         add     bl,7fh
  179.         jc        short knf1
  180.         add     bl,0a2h
  181. knf1:    and     bh,7fh                            ; StoJ end
  182.  
  183.         mov     ax,0100h
  184.         mov     dx,1010h
  185.  
  186.         call    pword ptr fs:[00a0h]            ; Get Kanji Font
  187.  
  188.         mov     edi,ss:[ebp+8]                    ; *vram
  189.         add     edi,ss:[ebp-4]                    ; work add
  190.         or        edi,gs:[page_ofs]                ; or Page Offset
  191.         mov     ebx,offset fntcol
  192.         xor     edx,edx                         ; edx=0
  193.         xor     ecx,ecx                         ; ecx=0
  194.         REPT    16
  195.         lodsw                                    ; Get Kanji Font Pattern
  196.         mov     cl,al                            ; Left Font Pattern
  197.         mov     dl,ah                            ; Right Font Pattern
  198.         mov     eax,gs:[ebx+ecx*4]                ; Get Vram Bit Pattern
  199.         stosd                                    ; Write Left Font
  200.         mov     eax,gs:[ebx+edx*4]                ; Get Vram Bit Pattern
  201.         stosd                                    ; Write Right Font
  202.         add     edi,512-4*2                     ; 1 Line 512 Byte
  203.         and     edi,3FFFFh            ; 画面の下からはみ出さないように
  204.         endm
  205.         mov     ax,gs
  206.         mov     ds,ax
  207.         add     dword ptr [ebp-4],8             ; Next vram Address
  208.  
  209.         jmp     putlop                            ; Next Put String Loop
  210.  
  211.         align    4                                ; align set
  212. putank:                                         ; Write Ank Font
  213.         mov     [ebp+12],esi                    ; Save *str
  214.         movzx    esi,al
  215.         shl     esi,6                            ; 4x16=64
  216.         add     esi,offset ankfnt                ; ANK Font Table Offset
  217.  
  218.         mov     edi,[ebp+8]                     ; *vram
  219.         add     edi,[ebp-4]                     ; work add
  220.         or        edi,[page_ofs]                    ; or Page Offset
  221.         mov     ebx,512-4
  222.         REPT    15
  223.         movsd                                    ; Trans Font
  224.         add     edi,ebx                         ; Line add
  225.         and     edi,3FFFFh            ; 画面の下からはみ出さないように
  226.         endm
  227.         movsd                                    ; Trans Font
  228.         add     dword ptr [ebp-4],4             ; Next vram Address
  229.  
  230.         jmp     putlop                            ; Next Put String Loop
  231.  
  232.         align    4
  233.  
  234.         public    Left_clear
  235. Left_clear:
  236.         ; VRAM Clear
  237.         mov     ebx,320
  238.         sub     ebx,[ebp-4]                     ; nokori dword
  239.         je        nonclr
  240.  
  241.         mov     edi,[ebp+8]                     ; *vram
  242.         add     edi,[ebp-4]                     ; work add
  243.         or        edi,[page_ofs]                    ; or Page Offset
  244.         shr     ebx,2                            ; / 4
  245.         mov     ebp,[ebp-4]
  246.         add     ebp,512-320
  247.         mov     eax,[fntcol]
  248.         mov     edx,03FFFFh
  249.         mov     esi,[page_ofs]
  250.         REPT    16
  251.         mov     ecx,ebx                         ; nokori dword
  252.         rep     stosd
  253.         add     edi,ebp
  254.         and     edi,edx
  255.         or        edi,esi
  256.         endm
  257. nonclr:
  258.         ; end of VRAM Clear
  259.         pop     ebx
  260.         pop     ecx
  261.         pop     edx
  262.         pop     edi
  263.         pop     esi
  264.         pop     es
  265.         pop     fs
  266.         pop     gs
  267.  
  268.         pop     eax                             ; work pop
  269.         pop     ebp
  270.         ret                                     ; end of putstr
  271.  
  272. putstr    endp
  273. ;***************************************************
  274. ;        void    ctblset(int chr_col,int bak_col);
  275. ;***************************************************
  276.         public    ctblset
  277. ctblset proc    near
  278.         push    ebp
  279.         mov     ebp,esp
  280.         push    esi
  281.         push    edi
  282.         push    fs
  283.  
  284.         mov     ecx,256
  285.         mov     esi,offset fntptn
  286.         mov     edi,offset fntcol
  287. ctblp:    lodsd
  288.         mov     edx,eax
  289.         not     edx
  290.         and     eax,[ebp+8]
  291.         and     edx,[ebp+12]
  292.         or        eax,edx
  293.         stosd
  294.         loop    ctblp
  295.  
  296.         mov     ax,138h                         ; ANK Font Selecter
  297.         mov     fs,ax
  298.         mov     esi,3D800h
  299.         mov     edi,offset ankfnt
  300.  
  301.         mov     ecx,16*256
  302. aktb1:    movzx    eax,byte ptr fs:[esi]
  303.         inc     esi
  304.         mov     eax,[eax*4+fntcol]
  305.         stosd
  306.         loop    aktb1
  307.  
  308.         pop     fs
  309.         pop     edi
  310.         pop     esi
  311.         pop     ebp
  312.         ret
  313. ctblset endp
  314.  
  315. ;****************************************************************************
  316. ;    wrtstr(char *str, int page, char *vram, int forcol, int bakcol, int font)
  317. ;                +8          +12         +16        +20         +24         +28
  318. ;****************************************************************************
  319.         align    4                                ; align set
  320.         public    wrtstr
  321. wrtstr    proc    near
  322.         push    ebp
  323.         mov     ebp,esp
  324.         push    gs
  325.         push    fs
  326.         push    es
  327.         push    esi
  328.         push    edi
  329.         push    ebx
  330.  
  331.         mov     ax,104h                         ; VRAM Selecter
  332.         mov     gs,ax                            ; gs = VRAM Selecter
  333.         mov     ax,110h                         ; TBIOS Selecter
  334.         mov     fs,ax                            ; fs = TBIOS
  335.  
  336.         align    4                                ; align set
  337. wrtlop:                                         ; Put Loop
  338.         mov     esi,[ebp+8]                     ; char *str
  339.         movzx    eax,byte ptr [esi]
  340.         inc     si
  341.         or        al,al
  342.         jnz     short wrtnxt                    ; End of String ?
  343.  
  344.         pop     ebx
  345.         pop     edi
  346.         pop     esi
  347.         pop     es
  348.         pop     fs
  349.         pop     gs
  350.         pop     ebp
  351.         ret                                     ; end of putstr
  352.  
  353.         align    4                                ; align set
  354. wrtnxt:
  355.         mov     bl,[eax+offset kantbl]
  356.         and     bl,ISKAN1
  357.         jz        wrtank                            ; Not iskanji1 ?
  358.         movzx    ebx,byte ptr [esi]
  359.         mov     bh,[ebx+offset kantbl]
  360.         and     bh,ISKAN2
  361.         jz        wrtank                            ; Not iskanji2 ?
  362.         mov     bh,al
  363.         inc     si
  364.         mov     [ebp+8],esi                     ; Save *str
  365.  
  366.         shl     bh,1                            ; Shift Jis to Jis
  367.         cmp     bl,080h
  368.         adc     bx,1f61h
  369.         add     bl,7fh
  370.         jc        short wrtst1
  371.         add     bl,0a2h
  372. wrtst1: and     bh,7fh                            ; StoJ end
  373.  
  374.         mov     ax,0100h
  375.         mov     dx,1010h
  376.         push    ds
  377.         call    pword ptr fs:[00a0h]            ; Get Kanji Font
  378.         push    ds                                ; ds:esi = Kanji Font
  379.         pop     es                                ; change ds<->es
  380.         pop     ds
  381.  
  382.         mov     edi,[ebp+16]                    ; *vram
  383.         or        edi,[ebp+12]                    ; page
  384.         mov     ecx,[ebp+28]                    ; Y = 16 Dot Font
  385.         align    4                                ; align set
  386.  
  387. wtkn1:    mov     bx,es:[esi]
  388.         add     esi,2
  389.  
  390.         cmp     byte ptr [ebp+28],16
  391.         je        short wtkn2
  392.         or        bx,es:[esi]
  393.         add     esi,2
  394. wtkn2:
  395.         movzx    eax,bl                            ; Get Kanji Left Font Pattern
  396.         mov     eax,[eax*4+fntptn]                ; Get Vram Bit Pattern
  397.         mov     edx,eax
  398.         not     edx
  399.         and     eax,[ebp+20]
  400.         and     edx,[ebp+24]
  401.         or        eax,edx
  402.         mov     gs:[edi],eax                    ; Write Kanji Left Font
  403.  
  404.         movzx    eax,bh                            ; Get Kanji Right Font Pattern
  405.         mov     eax,[eax*4+fntptn]                ; Get Vram Bit Pattern
  406.         mov     edx,eax
  407.         not     edx
  408.         and     eax,[ebp+20]
  409.         and     edx,[ebp+24]
  410.         or        eax,edx
  411.         mov     gs:[edi+4],eax                    ; Write Kanji Right Font
  412.  
  413.         add     edi,512                         ; 1 Line 512 Byte
  414.         and     edi,03FFFFh
  415.         or        edi,[ebp+12]                    ; Page
  416.         loop    wtkn1
  417.  
  418.         add     dword ptr [ebp+16],8
  419.         jmp     wrtlop                            ; Next Put String Loop
  420.  
  421.         align    4                                ; align set
  422. wrtank:                                         ; Write Ank Font
  423.         cmp     al,1Bh                            ; Esc Code
  424.         jne     short wtak0
  425.  
  426.         movzx    eax,byte ptr [esi]
  427.         inc     esi
  428. wtak0:    mov     [ebp+8],esi                     ; Save *str
  429.         mov     esi,eax
  430.  
  431.         cmp     byte ptr [ebp+28],16
  432.         jne     short wrtft1
  433.         shl     esi,4                            ; x16
  434.         add     esi,3D800h                        ; 8x16 ANK Font Offset
  435.         jmp     short wrtft2
  436. wrtft1: shl     esi,3                            ; x8
  437.         add     esi,3D000h                        ; 8x8 ANK Font Offset
  438.  
  439. wrtft2: mov     ax,138h                         ; ANK Font Selecter
  440.         mov     es,ax
  441.  
  442.         mov     edi,[ebp+16]                    ; *vram
  443.         or        edi,[ebp+12]                    ; Page
  444.         mov     ecx,[ebp+28]                    ; Y = 16 Dot Font
  445.         align    4                                ; align set
  446.  
  447. wtak1:    movzx    eax,byte ptr es:[esi]            ; Get Font Pattern
  448.         inc     esi
  449.         mov     eax,[eax*4+fntptn]                ; Get Vram Bit Pattern
  450.         mov     edx,eax
  451.         not     edx
  452.         and     eax,[ebp+20]
  453.         and     edx,[ebp+24]
  454.         or        eax,edx
  455.         mov     gs:[edi],eax                    ; Write Ank Font
  456.  
  457.         add     edi,512                         ; 1 Line 512 Byte
  458.         and     edi,03FFFFh
  459.         or        edi,[ebp+12]                    ; Page
  460.         loop    wtak1
  461.  
  462.         add     dword ptr [ebp+16],4
  463.  
  464.         jmp     wrtlop                            ; Next Put String Loop
  465.  
  466. wrtstr    endp
  467.  
  468. ;****************************************************************************
  469. ;    prtstr(char *str, int *col, char *vram, int bakcol, int len)
  470. ;    wrtstr(char *str, int page, char *vram, int forcol, int bakcol, int font)
  471. ;                +8          +12         +16        +20         +24         +28
  472. ;****************************************************************************
  473. ;        align    4                                ; align set
  474. ;        public    prtstr
  475. ;prtstr    proc    near
  476. ;        push    ebp
  477. ;        mov     ebp,esp
  478. ;        mov        eax,[ebp+24]
  479. ;        shl     eax,2
  480. ;        push    eax                             ; work push
  481. ;
  482. ;        push    gs
  483. ;        push    fs
  484. ;        push    es
  485. ;        push    esi
  486. ;        push    edi
  487. ;        push    edx
  488. ;        push    ecx
  489. ;        push    ebx
  490. ;;
  491. ;        mov     ax,104h                         ; VRAM Selecter
  492. ;        mov     gs,ax                            ; gs = VRAM Selecter
  493. ;        mov     ax,110h                         ; TBIOS Selecter
  494. ;        mov     fs,ax                            ; fs = TBIOS
  495. ;
  496. ;        align    4                                ; align set
  497. ;prtlop:                                         ; Put Loop
  498. ;        mov     edi,[ebp+24]                    ; load strings len
  499. ;        or        edi,edi
  500. ;        jne         prt_ok                            ; End of String ?
  501. ;
  502. ;        mov     eax,[ebp+16]
  503. ;        mov     [ebp+8],eax
  504. ;
  505. ;
  506. ;        jmp        Left_clear                        ; left clear
  507. ;
  508. ;        align    4
  509. ;prt_ok:
  510. ;        dec     edi                             ; dec strings len
  511. ;        mov     [ebp+24],edi                    ; save strings len
  512. ;
  513. ;        mov     esi,[ebp+8]                     ; char *str
  514. ;        movzx    eax,byte ptr [esi]
  515. ;        inc     si
  516. ;
  517. ;        mov     bl,[eax+offset kantbl]
  518. ;        and     bl,ISKAN1
  519. ;        jz        prtank                            ; Not iskanji1 ?
  520. ;
  521. ;        dec     edi                             ; この後に文字がある?
  522. ;        or        edi,edi                         ;
  523. ;        je        prtank                            ;  ない -> prtank
  524. ;
  525. ;        movzx    ebx,byte ptr [esi]
  526. ;        mov     bh,[ebx+offset kantbl]
  527. ;        and     bh,ISKAN2
  528. ;        jz        prtank                            ; Not iskanji2 ?
  529. ;
  530. ;        mov     edx,dword ptr [ebp+12]            ; fore color
  531. ;        mov     edx,4[edx]
  532. ;        cmp     edx,0AAAAAAAAh                    ; normal character ?
  533. ;        jne     prtank                            ; No! -> ank
  534. ;
  535. ;        mov     [ebp+24],edi                    ; save strings len
  536. ;
  537. ;        mov     bh,al
  538. ;        inc     si
  539. ;        mov     [ebp+8],esi                     ; Save *str
  540. ;
  541. ;        shl     bh,1                            ; Shift Jis to Jis
  542. ;        cmp     bl,080h
  543. ;        adc     bx,1f61h
  544. ;        add     bl,7fh
  545. ;        jc        short prtst1
  546. ;        add     bl,0a2h
  547. ;prtst1: and     bh,7fh                            ; StoJ end
  548. ;
  549. ;        mov     ax,0100h
  550. ;        mov     dx,1010h
  551. ;        push    ds
  552. ;        call    pword ptr fs:[00a0h]            ; Get Kanji Font
  553. ;        push    ds                                ; ds:esi = Kanji Font
  554. ;        pop     es                                ; change ds<->es
  555. ;        pop     ds
  556. ;
  557. ;        mov     edi,[ebp+16]                    ; *vram
  558. ;        mov     ecx,16                            ; Y = 16 Dot Font
  559. ;        align    4                                ; align set
  560. ;
  561. ;ptkn1:    mov     bx,es:[esi]
  562. ;        add     esi,2
  563. ;
  564. ;        movzx    eax,bl                            ; Get Kanji Left Font Pattern
  565. ;        mov     eax,[eax*4+fntptn]                ; Get Vram Bit Pattern
  566. ;        mov     edx,eax
  567. ;        not     edx
  568. ;
  569. ;        push    ecx
  570. ;        mov     ecx,dword ptr [ebp+12]            ; fore color
  571. ;        mov     ecx,[ecx]
  572. ;        and     eax,ecx                         ; fore color
  573. ;        and     edx,[ebp+20]                    ; back color
  574. ;        or        eax,edx
  575. ;        mov     gs:[edi],eax                    ; Write Kanji Left Font
  576. ;        movzx    eax,bh                            ; Get Kanji Right Font Pattern
  577. ;        mov     eax,[eax*4+fntptn]                ; Get Vram Bit Pattern
  578. ;
  579. ;        mov     edx,eax
  580. ;        not     edx
  581. ;        and     eax,ecx                         ; fore color
  582. ;        and     edx,[ebp+20]                    ; back color
  583. ;        or        eax,edx
  584. ;        mov     gs:[edi+4],eax                    ; Write Kanji Right Font
  585. ;        pop     ecx
  586. ;
  587. ;        add     edi,512                         ; 1 Line 512 Byte
  588. ;        and     edi,03FFFFh
  589. ;        loop    ptkn1
  590. ;
  591. ;        add     dword ptr [ebp+12],8            ; col += 2;
  592. ;        add     dword ptr [ebp+16],8            ; increment dest. ptr
  593. ;        jmp     prtlop                            ; Next Put String Loop
  594. ;
  595. ;        align    4                                ; align set
  596. ;prtank:                                         ; Write Ank Font
  597. ;        cmp     al,1Bh                            ; Esc Code
  598. ;        jne     short ptak0
  599. ;
  600. ;        movzx    eax,byte ptr [esi]
  601. ;        inc     esi
  602. ;ptak0:    mov     [ebp+8],esi                     ; Save *str
  603. ;        mov     esi,eax
  604. ;
  605. ;        shl     esi,4                            ; x16
  606. ;        add     esi,3D800h                        ; 8x16 ANK Font Offset
  607. ;
  608. ;        mov     ax,138h                         ; ANK Font Selecter
  609. ;        mov     es,ax
  610. ;
  611. ;        mov     edi,[ebp+16]                    ; *vram
  612. ;        mov     ecx,16                            ; Y = 16 Dot Font
  613. ;        align    4                                ; align set
  614. ;
  615. ;ptak1:    movzx    eax,byte ptr es:[esi]            ; Get Font Pattern
  616. ;        inc     esi
  617. ;        mov     eax,[eax*4+fntptn]                ; Get Vram Bit Pattern
  618. ;        mov     edx,eax
  619. ;        not     edx
  620. ;
  621. ;        push    ecx
  622. ;        mov     ecx,dword ptr [ebp+12]            ; fore color
  623. ;        mov     ecx,[ecx]
  624. ;        and     eax,ecx                         ; fore color
  625. ;        and     edx,[ebp+20]                    ; back color
  626. ;        or        eax,edx
  627. ;        mov     gs:[edi],eax                    ; Write Ank Font
  628. ;        pop     ecx
  629. ;
  630. ;        add     edi,512                         ; 1 Line 512 Byte
  631. ;        and     edi,03FFFFh
  632. ;        loop    ptak1
  633. ;
  634. ;        add     dword ptr [ebp+12],4            ; col++;
  635. ;        add     dword ptr [ebp+16],4            ; increment dest. ptr
  636. ;
  637. ;        jmp     prtlop                            ; Next Put String Loop
  638. ;
  639. ;prtstr    endp
  640.  
  641. ;**************************************
  642. ;    int        inport(int portaddr)
  643. ;**************************************
  644. ;        public    inport
  645. ;inport    proc    near
  646. ;        push    ebp
  647. ;        mov        ebp,esp
  648. ;        push    edx
  649. ;        mov        edx,[ebp+8]
  650. ;        xor        eax,eax
  651. ;        in         al,dx
  652. ;        pop        edx
  653. ;        pop        ebp
  654. ;        ret
  655. ;inport    endp
  656.  
  657. ;**************************************
  658. ;        VRAM Disp Start Addr Set
  659. ;**************************************
  660. ;    void    dsp_adr_set(int lines)
  661. ;**************************************
  662.         public    dsp_adr_set
  663. dsp_adr_set     proc    near
  664.         push    ebp
  665.         mov     ebp,esp
  666.         push    edx
  667.  
  668. ;        mov        dx,0FDA0h            ; 追加 check VSYNC
  669. ;das_10:    in        al,dx
  670. ;        and        al,01h
  671. ;        je         das_10
  672.  
  673.         mov     dx,0440h
  674.         mov     al,17                ; CRTC FA0
  675.         out     dx,al
  676.  
  677.         mov     dx,0442h
  678.         mov     eax,[ebp+8]
  679.         and     eax,511             ; 追加
  680.         shl     eax,7                ; 追加
  681.         out     dx,ax
  682.  
  683.         pop     edx
  684.         pop     ebp
  685.         ret
  686. dsp_adr_set        endp
  687.  
  688. ;**************************************
  689. ;        I/O Register access
  690. ;**************************************
  691.  
  692. ;void    outregw(int port_addr, int reg_num, int data)
  693.  
  694.         public    outregw
  695. outregw proc    near
  696.         mov     dx,[esp+4]
  697.         mov     al,[esp+8]
  698.         out     dx,al
  699.         add     dx,2
  700.         mov     ax,[esp+12]
  701.         out     dx,ax
  702.         ret
  703. outregw    endp
  704.  
  705.  
  706. ;**************************************
  707. ;        wait VSYNC
  708. ;**************************************
  709. ;
  710. ;void    w_vsync(void)
  711. ;
  712. ;        public    w_vsync
  713. ;w_vsync    proc    near
  714. ;
  715. ;        mov     dx,0FDA0h
  716. ;wv10:    in        al,dx
  717. ;        and     al,01h
  718. ;        je        wv10
  719. ;        ret
  720. ;
  721. ;w_vsync    endp
  722.  
  723. VRAM    ends
  724.         end
  725.  
  726.